package sv.com.renacempleo.web.controller.red;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONArray;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.tuckey.web.filters.urlrewrite.utils.StringUtils;

import sv.com.renacempleo.dto.ctg.CtgCatalogo;
import sv.com.renacempleo.dto.ctg.CtgDocumentos;
import sv.com.renacempleo.dto.red.RedDemandantes;
import sv.com.renacempleo.dto.red.RedFormacionDemandante;
import sv.com.renacempleo.dto.red.RedIdiomasDemandante;
import sv.com.renacempleo.dto.red.RedObservacionesDemandante;
import sv.com.renacempleo.dto.red.RedPuestoBuscaDemandante;
import sv.com.renacempleo.dto.red.vinculacion.RedEstadoSeguimientoPostulante;
import sv.com.renacempleo.dto.red.vinculacion.RedOfertaDemandante;
import sv.com.renacempleo.exception.WebException;
import sv.com.renacempleo.web.controller.BaseController;
import sv.com.renacempleo.web.security.CustomUser;
import sv.com.renacempleo.web.util.DBContext;
import sv.com.renacempleo.web.util.WebUtilidades;
import sv.com.renacempleo.web.util.WebUtilidadesConstants;

@Controller
@RequestMapping("/red/demandante")
public class RedDamandanteController extends BaseController{

	private static final long serialVersionUID = 5429557808764278652L;
	
	@RequestMapping(value = "/view", method = {RequestMethod.GET, RequestMethod.POST})
	public String view(ModelMap model, 
			@RequestParam (required = false) String header) {
		model.addAttribute(WebUtilidades.HEADER_TITLE, StringUtils.isBlank(header) ? "DEMANDANTES" : header);
		return "red/demandante/redDemandante";
	}
	
	@RequestMapping(value = "/findById", method = {RequestMethod.GET, RequestMethod.POST})
	public void findById(@RequestParam(required = false) Long redDemandanteFolio, HttpServletResponse response) {
		Map<String, Object> result = new HashMap<String, Object>();
		Map<String, Object> catalogos = new HashMap<String, Object>();
		try{
			catalogos.put("ctgDepartamentos", DBContext.getCtgDepartamentoDao().findAllActivesAsArray());
			catalogos.put("ctgMunicipios", DBContext.getCtgMunicipioDao().findAllActivesAsArray());
			catalogos.put("ctgOficina", DBContext.getCtgOficinasDao().findAllActivesAsArray());
			catalogos.put("sgdUsuario", DBContext.getSgdUsuarioDao().findAllActivesAsArray());
			catalogos.put("ctgDocumento", DBContext.getCtgDocumentosDao().findAllActiveByIdentificacion());
			catalogos.put("ctgGenero", DBContext.getCtgCatalogoDao().findAllActivesByCodigoAsArray(WebUtilidades.CTG_GENERO_PADRE));
			catalogos.put("ctgEstadoCivil", DBContext.getCtgCatalogoDao().findAllActivesByCodigoAsArray(WebUtilidades.CTG_ESTADO_CIVIL_PADRE));
			catalogos.put("ctgTipoLicencia", DBContext.getCtgCatalogoDao().findAllActivesByCodigoAsArray(WebUtilidades.CTG_TIPO_LICENCIA_PADRE));
			catalogos.put("ctgTipoVehiculo",DBContext.getCtgCatalogoDao().findAllActivesByCodigoAsArray(WebUtilidades.CTG_TIPO_VEHICULO_PADRE));
			catalogos.put("ctgEscolaridad", DBContext.getCtgCatalogoDao().findAllActivesByCodigoAsArray(WebUtilidades.CTG_ESCOLARIDAD_PADRE));
			catalogos.put("ctgEspecialidad", DBContext.getCtgCatalogoDao().findAllActivesByCodigoAsArray(WebUtilidades.CTG_ESPECIALIDAD_PADRE));
			catalogos.put("ctgIdioma", DBContext.getCtgCatalogoDao().findAllActivesByCodigoAsArray(WebUtilidades.CTG_IDIOMAS_PADRE));
			catalogos.put("ctgNivelIdioma", DBContext.getCtgCatalogoDao().findAllActivesByCodigoAsArray(WebUtilidades.CTG_NIVEL_IDIOMA_PADRE));
			catalogos.put("ctgTipoContrato", DBContext.getCtgCatalogoDao().findAllActivesByCodigoAsArray(WebUtilidades.CTG_TIPO_CONTRATO_PADRE));
			catalogos.put("ctgJornada", DBContext.getCtgCatalogoDao().findAllActivesByCodigoAsArray(WebUtilidades.CTG_JORNADA_LABORAL_PADRE));
			catalogos.put("ctgMotivoRetiro", DBContext.getCtgCatalogoDao().findAllActivesByCodigoAsArray(WebUtilidades.CTG_MOTIVO_RETIRO_PADRE));
			result.put("catalogos", catalogos);
			result.put("redDocumentosDemandante",  createCheckboxGroup(DBContext.getRedDemandanteDao().findRedDocumentosVigenteByRedDemandanteFolio(redDemandanteFolio), "redDocumentosDemandante"));
			result.put("redDisposicionDemandante", createCheckboxGroup(DBContext.getRedDemandanteDao().findRedDisposicionByRedDemandanteFolio(redDemandanteFolio), "redDisposicionDemandante"));
			result.put("redMedioBusquedaDemandante", createCheckboxGroup(DBContext.getRedDemandanteDao().findRedMediosBusquedaByRedDemandanteFolio(redDemandanteFolio), "redMedioBusquedaDemandante"));
			result.put("redExistenciaDemandante", createCheckboxGroup(DBContext.getRedDemandanteDao().findRedExistenciaByRedDemandanteFolio(redDemandanteFolio), "redExistenciaDemandante"));
			if(redDemandanteFolio != null && redDemandanteFolio > 0){
				result.put("demandante", DBContext.getRedDemandanteDao().findByIdAsMap(redDemandanteFolio));
				result.put("redDemandanteFormacionAcademicaList", DBContext.getRedDemandanteDao().findRedDemandanteFormacionAcademicaByRedDemandanteFolio(redDemandanteFolio));
				result.put("redDemandanteIdiomaList", DBContext.getRedDemandanteDao().findRedDemandanteIdiomaByRedDemandanteFolio(redDemandanteFolio));
				result.put("redPuestoDemandanteList", DBContext.getRedDemandanteDao().findRedPuestoDemandante(redDemandanteFolio));
			}
			result.put(SUCCESS, true);
		}catch(WebException e){
			logger.error(e, e);
			result.put(MESSAGE, e.getMessage());
			result.put(FAILURE, true);
		}catch(Exception e){
			logger.error(e, e);
			result.put(MESSAGE, "Problemas a tratar de cargar la informaci\u00F3n");
			result.put(FAILURE, true);
		}
		serializeObject(result, response);
	}
	
	@RequestMapping(value = "/consultarDemandante", method = {RequestMethod.POST})
	public void consultarDemandante(
			@RequestParam Long redDemandanteFolio, 
			HttpServletResponse response){
		Map<String, Object> result = new HashMap<String, Object>();
		try {
			result.put("demandante", DBContext.getRedDemandanteDao().getDemandante(redDemandanteFolio));
			result.put(SUCCESS, true);
		} catch (WebException e) {
			logger.error("Exception:", e);
			result.put(FAILURE, true);
			result.put(MESSAGE, e.getExceptionMessage());
		}catch(Exception e){
			logger.error("Exception:", e);
			result.put(FAILURE, true);
			result.put(MESSAGE, DEFAULT_ERROR_MESSAGE);
		}
		serializeObject(result, response);
	}
	
	
	@RequestMapping(value = "/validateDocument", method = {RequestMethod.POST})
	public void validateDocument(
			@RequestParam Long ctgDocumentoId, 
			@RequestParam String redDemandanteNumeroDocumento,
			HttpServletResponse response){
		Map<String, Object> result = new HashMap<String, Object>();
		try {
			List<Object[]> list = DBContext.getRedDemandanteDao().findDemandanteByDocumento(ctgDocumentoId, redDemandanteNumeroDocumento);
			if(list.size()>0)
				result.put("validate", true);
			else
				result.put("validate", false);
				
			result.put(MESSAGE, "Datos Actualizados");
			result.put(SUCCESS, true);
		} catch (WebException e) {
			logger.error("Exception:", e);
			result.put(FAILURE, true);
			result.put(MESSAGE, e.getExceptionMessage());
		}catch(Exception e){
			logger.error("Exception:", e);
			result.put(FAILURE, true);
			result.put(MESSAGE, DEFAULT_ERROR_MESSAGE);
		}
		serializeObject(result, response);
	}
	
	@RequestMapping(value = "/buscarDemandantes", method = {RequestMethod.GET, RequestMethod.POST})
	public void buscarDemandantes(HttpServletResponse response,
			@RequestParam(required = false) int opcion, 
			@RequestParam(required = false) String estado,
			@RequestParam(required = false) String nombreDemandante
			){
		Map<String, Object> result = new HashMap<String, Object>();
		try {
			CustomUser cu = WebUtilidades.getCustomUserFromAcegi();
			result.put("demandante", JSONArray.fromObject(
					DBContext.getRedDemandanteDao().findDemandanteByCriterios(opcion, estado, nombreDemandante,cu,new Long(0))));
		}catch (Exception e) {
			logger.error(e);
		}
		serializeObject(result, response);
	}
	
	@RequestMapping(value = "/guardarDemandante", method = {RequestMethod.POST, RequestMethod.GET})
	public void guardarDemandante(
			HttpServletResponse response,
			@ModelAttribute("redDemandante") RedDemandantes redDemandante,
			@RequestParam(required = false) String[] redDocumentosDemandante){
		Map<String, Object> result = new HashMap<String, Object>();
		try {
			CtgCatalogo wkfEstadoSeguimiento = new CtgCatalogo();
			wkfEstadoSeguimiento.setCtgCatalogoId(new Long(107));
			redDemandante.setWkfEstadoSeguimiento(wkfEstadoSeguimiento);
			
			CtgDocumentos docs = new CtgDocumentos();
			docs.setCtgDocumentoId(Long.parseLong(redDocumentosDemandante[0]));
			
			redDemandante.setCtgDocumento(docs);
			DBContext.getRedDemandanteService().guardarDemandante(redDemandante);
			
			if(redDemandante.getRedDemandanteFolio()!=null){
				DBContext.getRedDemandanteService().guardarDocumentosDemandante(redDemandante.getRedDemandanteFolio(), 
						redDocumentosDemandante);
				
			}
		
			result.put("redDemandanteFolio", redDemandante.getRedDemandanteFolio());
			result.put("redEmpresaFechaRegistro", redDemandante.getRedDemandanteFechaRegistro());
			result.put(SUCCESS, true);
			result.put(MESSAGE, UPDATED_DATA);
		}catch (WebException e) {
			logger.error("Exception:", e);
			result.put(FAILURE, true);
			result.put(MESSAGE, e.getExceptionMessage());
		} catch (Exception e) {
			logger.error("Exception:", e);
			result.put(FAILURE, true);
			result.put(MESSAGE, DEFAULT_ERROR_MESSAGE);
		}
		serializeObject(result, response);
	}
	
	@RequestMapping(value = "/getCtgEstadoSeguimiento", method = {RequestMethod.GET, RequestMethod.POST})
	public void getCtgEstadoSeguimiento(HttpServletResponse response){
		Map<String, Object> result = new HashMap<String, Object>();
		try {
			result.put("ctgEstadoSeguimiento", JSONArray.fromObject(
					DBContext.getCtgCatalogoDao().findAllActivesByCodigoAsArray(WebUtilidadesConstants.WKF_ESTADO_SEGUIMIENTO_PADRE)));
		}catch (Exception e) {
			logger.error(e);
		}
		serializeObject(result, response);
	}
	
	@RequestMapping(value = "/guardarObservacion", method = {RequestMethod.GET, RequestMethod.POST})
	public void guardarObservaciones(HttpServletResponse response,
			@ModelAttribute("redObservacionesDemandante") RedObservacionesDemandante redObservacionesDemandante){
		Map<String, Object> result = new HashMap<String, Object>();
		try {
			DBContext.getRedObservacionesDemandanteDao().save(redObservacionesDemandante);
			result.put("observacion", JSONArray.fromObject(DBContext.getRedObservacionesDemandanteDao().findAllObservacionesByDemandante(
					redObservacionesDemandante.getRedDemandante().getRedDemandanteFolio())));
			result.put(MESSAGE, "Datos Actualizados");
			result.put(SUCCESS, true);
		} catch (WebException e) {
			logger.error(e);
			result.put(MESSAGE, WebUtilidades.getExceptionMessage(e));
			result.put(FAILURE, true);
		}catch (Exception e) {
			logger.error(e);
			e.printStackTrace();
			result.put(MESSAGE, "Procesamiento Incorrecto");
			result.put(FAILURE, true);
		}
		result.put(MESSAGE, result.get(MESSAGE));
		serializeObject(result, response);
	}
	
	@RequestMapping(value = "/viewObservaciones", method = {RequestMethod.POST})
	public void viewObservaciones(@RequestParam Long redDemandanteFolio,
			HttpServletResponse response){
		Map<String, Object> result = new HashMap<String, Object>();
		try {
			result.put("observacion", JSONArray.fromObject(DBContext.getRedObservacionesDemandanteDao().findAllObservacionesByDemandante(
					redDemandanteFolio)));
			result.put(SUCCESS, true);
		}catch (WebException e) {
			logger.error(e);
			result.put(MESSAGE, WebUtilidades.getExceptionMessage(e));
			result.put(FAILURE, true);
		}catch (Exception e) {
			logger.error(e);
			e.printStackTrace();
			result.put(MESSAGE, "Procesamiento Incorrecto");
			result.put(FAILURE, true);
		}
		result.put(MESSAGE, result.get(MESSAGE));
		serializeObject(result, response);
	}
	
	@RequestMapping(value = "/guardarRedDemandanteFormacionAcademica", method = {RequestMethod.GET, RequestMethod.POST})
	public void guardarRedDemandanteFormacionAcademica(
			@ModelAttribute RedFormacionDemandante redFormacionDemandante,
			HttpServletResponse response){
		Map<String, Object> result = new HashMap<String, Object>();
		try{
			Long redDemandanteFolio = redFormacionDemandante.getRedDemandante().getRedDemandanteFolio();
			DBContext.getRedDemandanteService().guardarRedDemandanteFormacionAcademica(redFormacionDemandante);
			result.put("list", DBContext.getRedDemandanteDao().findRedDemandanteFormacionAcademicaByRedDemandanteFolio(redDemandanteFolio));
			result.put(MESSAGE, "Datos Actualizados");
			result.put(SUCCESS, true);
		}catch(WebException e){
			logger.error(e, e);
			result.put(MESSAGE, e.getMessage());
			result.put(FAILURE, true);
		}catch(Exception e){
			logger.error(e, e);
			result.put(MESSAGE, "Problemas a tratar de cargar la informaci\u00F3n");
			result.put(FAILURE, true);
		}
		serializeObject(result, response);
	}
	
	@RequestMapping(value = "/eliminarRedDemandanteFormacionAcademica", method = {RequestMethod.GET, RequestMethod.POST})
	public void eliminarRedDemandanteFormacionAcademica(
			@RequestParam Long redDemandanteFolio,
			@RequestParam Long currentId,
			HttpServletResponse response){
		Map<String, Object> result = new HashMap<String, Object>();
		try{
			DBContext.getRedDemandanteService().eliminarRedDemandanteFormacionAcademica(currentId);
			result.put("list", DBContext.getRedDemandanteDao().findRedDemandanteFormacionAcademicaByRedDemandanteFolio(redDemandanteFolio));
			result.put(MESSAGE, "Datos Actualizados");
			result.put(SUCCESS, true);
		}catch(WebException e){
			logger.error(e, e);
			result.put(MESSAGE, e.getMessage());
			result.put(FAILURE, true);
		}catch(Exception e){
			logger.error(e, e);
			result.put(MESSAGE, "Problemas a tratar de cargar la informaci\u00F3n");
			result.put(FAILURE, true);
		}
		serializeObject(result, response);
	}
	
	@RequestMapping(value = "/guardarRedDemandanteIdioma", method = {RequestMethod.GET, RequestMethod.POST})
	public void guardarRedDemandanteIdioma(
			@ModelAttribute RedIdiomasDemandante redIdiomasDemandante,
			HttpServletResponse response){
		Map<String, Object> result = new HashMap<String, Object>();
		try{
			Long redDemandanteFolio = redIdiomasDemandante.getRedDemandante().getRedDemandanteFolio();
			DBContext.getRedDemandanteService().guardarRedDemandanteIdioma(redIdiomasDemandante);
			result.put("list", DBContext.getRedDemandanteDao().findRedDemandanteIdiomaByRedDemandanteFolio(redDemandanteFolio));
			result.put(MESSAGE, "Datos Actualizados");
			result.put(SUCCESS, true);
		}catch(WebException e){
			logger.error(e, e);
			result.put(MESSAGE, e.getMessage());
			result.put(FAILURE, true);
		}catch(Exception e){
			logger.error(e, e);
			result.put(MESSAGE, "Problemas a tratar de cargar la informaci\u00F3n");
			result.put(FAILURE, true);
		}
		serializeObject(result, response);
	}
	
	@RequestMapping(value = "/eliminarRedDemandanteIdioma", method = {RequestMethod.GET, RequestMethod.POST})
	public void deleteRedOfertaIdioma(
			@RequestParam Long redDemandanteFolio,
			@RequestParam Long currentId,
			HttpServletResponse response){
		Map<String, Object> result = new HashMap<String, Object>();
		try{
			DBContext.getRedDemandanteService().eliminarRedDemandanteIdioma(currentId);
			result.put("list", DBContext.getRedDemandanteDao().findRedDemandanteIdiomaByRedDemandanteFolio(redDemandanteFolio));
			result.put(MESSAGE, "Datos Actualizados");
			result.put(SUCCESS, true);
		}catch(WebException e){
			logger.error(e, e);
			result.put(MESSAGE, e.getMessage());
			result.put(FAILURE, true);
		}catch(Exception e){
			logger.error(e, e);
			result.put(MESSAGE, "Problemas a tratar de cargar la informaci\u00F3n");
			result.put(FAILURE, true);
		}
		serializeObject(result, response);
	}
	
	@RequestMapping(value = "/guardarDisposicionDemandante", method = {RequestMethod.GET, RequestMethod.POST})
	public void guardarDisposicionDemandante(
			@RequestParam(required = false) Long redDemandanteFolio,
			@RequestParam(required = false) Long ctgJornadaId,
			@RequestParam(required = false) Long ctgTipoContratoId,
			@RequestParam(required = false) String[] redDisposicionDemandante,
			HttpServletResponse response){
		Map<String, Object> result = new HashMap<String, Object>();
		try{
			DBContext.getRedDemandanteService().guardarDisposicionDemandante(redDemandanteFolio, redDisposicionDemandante);
			DBContext.getRedDemandanteService().actualizarDisposicionDemandante(redDemandanteFolio, ctgJornadaId, ctgTipoContratoId);
			result.put(MESSAGE, "Datos Actualizados");
			result.put(SUCCESS, true);
		}catch(WebException e){
			logger.error(e, e);
			result.put(MESSAGE, e.getMessage());
			result.put(FAILURE, true);
		}catch(Exception e){
			logger.error(e, e);
			result.put(MESSAGE, "Problemas a tratar de cargar la informaci\u00F3n");
			result.put(FAILURE, true);
		}
		serializeObject(result, response);
	}
	
	@RequestMapping(value = "/buscarActivacionDemandante", method = {RequestMethod.POST})
	public void buscarActivacionDemandante(HttpServletResponse response,
			@RequestParam Long redDemandanteFolio){
		Map<String, Object> result = new HashMap<String, Object>();
		try {
			result.put("ctgMotivoRetiro", JSONArray.fromObject(DBContext.getCtgCatalogoDao().findAllByCodigoAsArray(WebUtilidades.CTG_MOTIVO_RETIRO_DEMANDANTE_PADRE)));
			result.put("activacion", DBContext.getRedDemandanteDao().findByIdAsMap(redDemandanteFolio));
			result.put(SUCCESS, true);
		}catch (WebException e) {
			logger.error(e);
			result.put(MESSAGE, WebUtilidades.getExceptionMessage(e));
			result.put(FAILURE, true);
		}catch (Exception e) {
			logger.error(e);
			e.printStackTrace();
			result.put(MESSAGE, "Procesamiento Incorrecto");
			result.put(FAILURE, true);
		}
		result.put(MESSAGE, result.get(MESSAGE));
		serializeObject(result, response);
	}
	
//	@RequestMapping(value = "/activarDemandante", method = {RequestMethod.POST})
//	public void activarDemandante(HttpServletResponse response,
//			@RequestParam Long redDemandanteFolio,
//			@RequestParam String redDemandanteEstado,
//			@RequestParam (required = false) Long ctgMotivoRetiro){
//		Map<String, Object> result = new HashMap<String, Object>();
//		try{
//			DBContext.getRedDemandanteService().activarRedDemandante(redDemandanteFolio, redDemandanteEstado, ctgMotivoRetiro);
//			result.put("activacion", DBContext.getRedDemandanteDao().findByIdAsMap(redDemandanteFolio));
//			result.put(MESSAGE, "Datos Actualizados");
//			result.put(SUCCESS, true);
//		}catch(WebException e){
//			logger.error(e, e);
//			result.put(MESSAGE, e.getMessage());
//			result.put(FAILURE, true);
//		}catch(Exception e){
//			logger.error(e, e);
//			result.put(MESSAGE, "Problemas a tratar de cargar la informaci\u00F3n");
//			result.put(FAILURE, true);
//		}
//		serializeObject(result, response);
//	}
	
	@RequestMapping(value = "/guardarMonitoreoDemandante", method = {RequestMethod.POST, RequestMethod.GET})
	public void guardarMonitoreoDemandante(
			HttpServletResponse response,
			@RequestParam Long redDemandanteFolio,
			@RequestParam(required = false) String[] redMedioBusquedaDemandante,
			@RequestParam(required = false) String[] redExistenciaDemandante){
		Map<String, Object> result = new HashMap<String, Object>();
		try {	
			DBContext.getRedDemandanteService().guardarMonitoreoBusqueda(redDemandanteFolio, redMedioBusquedaDemandante, redExistenciaDemandante);
			result.put(SUCCESS, true);
			result.put(MESSAGE, UPDATED_DATA);
		}catch (WebException e) {
			logger.error("Exception:", e);
			result.put(FAILURE, true);
			result.put(MESSAGE, e.getExceptionMessage());
		} catch (Exception e) {
			logger.error("Exception:", e);
			result.put(FAILURE, true);
			result.put(MESSAGE, DEFAULT_ERROR_MESSAGE);
		}
		serializeObject(result, response);
	}
	
	@RequestMapping(value = "/viewCriteriosVinculacion", method = {RequestMethod.POST})
	public void viewCriteriosVinculacion(HttpServletResponse response){
		Map<String, Object> result = new HashMap<String, Object>();
		try {
			result.put("criterios",JSONArray.fromObject(DBContext.getCtgCriteriosVinculacionDao().findAllChecked()));
			result.put(SUCCESS, true);
		}catch (WebException e) {
			logger.error(e);
			result.put(MESSAGE, WebUtilidades.getExceptionMessage(e));
			result.put(FAILURE, true);
		}catch (Exception e) {
			logger.error(e);
			e.printStackTrace();
			result.put(MESSAGE, "Procesamiento Incorrecto");
			result.put(FAILURE, true);
		}
		result.put(MESSAGE, result.get(MESSAGE));
		serializeObject(result, response);
	}
	
	@RequestMapping(value = "/guardarRedPuestoDemandante", method = {RequestMethod.GET, RequestMethod.POST})
	public void guardarRedPuestoDemandante(
			@ModelAttribute RedPuestoBuscaDemandante redPuestoBuscaDemandante,
			HttpServletResponse response){
		Map<String, Object> result = new HashMap<String, Object>();
		try{
			Long redDemandanteFolio = redPuestoBuscaDemandante.getRedDemandantes().getRedDemandanteFolio();
			DBContext.getRedDemandanteService().guardarRedPuestoDemandante(redPuestoBuscaDemandante);
			result.put("list", DBContext.getRedDemandanteDao().findRedPuestoDemandante(redDemandanteFolio));
			result.put(MESSAGE, "Datos Actualizados");
			result.put(SUCCESS, true);
		}catch(WebException e){
			logger.error(e, e);
			result.put(MESSAGE, e.getMessage());
			result.put(FAILURE, true);
		}catch(Exception e){
			logger.error(e, e);
			result.put(MESSAGE, "Problemas a tratar de cargar la informaci\u00F3n");
			result.put(FAILURE, true);
		}
		serializeObject(result, response);
	}
	
	@RequestMapping(value = "/afectarDemandante", method = {RequestMethod.GET, RequestMethod.POST})
	public void afectarDemandante(
			@ModelAttribute RedOfertaDemandante redOfertaDemandante,
			HttpServletResponse response){
		Map<String, Object> result = new HashMap<String, Object>();
		try{
			List<Object[]> lsOfertaDemandante = DBContext.getRedOfertaDemandanteDao().findOfertasByRedDemandanteFolioAndRedOfertaId(
					redOfertaDemandante.getRedDemandante().getRedDemandanteFolio(),
					redOfertaDemandante.getRedOferta().getRedOfertaId());
			
			if(lsOfertaDemandante!=null && lsOfertaDemandante.size()>0){
				result.put(MESSAGE, "Oferta ya ha sido asociada al Demandante");
				result.put(FAILURE, true);
			}
			else{
				DBContext.getRedOfertaDemandanteDao().save(redOfertaDemandante);
				result.put(MESSAGE, "Datos Actualizados");
				result.put(SUCCESS, true);
			}
				
		}catch(WebException e){
			logger.error(e, e);
			result.put(MESSAGE, e.getMessage());
			result.put(FAILURE, true);
		}catch(Exception e){
			logger.error(e, e);
			result.put(MESSAGE, "Problemas a tratar de cargar la informaci\u00F3n");
			result.put(FAILURE, true);
		}
		serializeObject(result, response);
	}
	
	@RequestMapping(value = "/viewOfertasDemandante", method = {RequestMethod.GET, RequestMethod.POST})
	public void viewOfertasDemandante(HttpServletResponse response,
			@RequestParam Long redDemandanteFolio){
		Map<String, Object> result = new HashMap<String, Object>();
		try{
			result.put("ofertas", JSONArray.fromObject(DBContext.getRedOfertaDemandanteDao().findAllOfertasAsArray(redDemandanteFolio)));
		}catch(Exception e){
			logger.error(e, e);
			result.put(MESSAGE, "Problemas a tratar de cargar la informaci\u00F3n");
			result.put(FAILURE, true);
		}
		serializeObject(result, response);
	}
	
	@RequestMapping(value = "/delete", method = {RequestMethod.POST})
	public void delete(@RequestParam Long redDemandanteFolio,
			HttpServletResponse response){
		Map<String, Object> result = new HashMap<String, Object>();
		try {
			DBContext.getRedDemandanteService().deleteRedDemandante(redDemandanteFolio);
			result.put("data", JSONArray.fromObject(DBContext.getRedOfertaDemandanteDao().findAllOfertasAsArray(redDemandanteFolio)));
			result.put(SUCCESS, true);
			result.put(MESSAGE, UPDATED_DATA);
		} catch (WebException e) {
			logger.error("delete", e);
			result.put(FAILURE, true);
			result.put(MESSAGE, e.getExceptionMessage());
		} catch (Exception e) {
			logger.error("delete", e);
			result.put(FAILURE, true);
			result.put(MESSAGE, DEFAULT_ERROR_MESSAGE);
		}
		serializeObject(result, response);
	}
	
	@RequestMapping(value = "/cambiarEstadosDemandante", method = {RequestMethod.GET, RequestMethod.POST})
	public void cambiarEstadosDemandante(HttpServletResponse response, 
			@ModelAttribute RedEstadoSeguimientoPostulante redEstadoSeguimientoPostulante, String redDemandantes, Long redOfertaId){
		Long redDemandanteFolio = null;
		Map<String, Object> result = new HashMap<String, Object>();
		if(redDemandantes!=""){
			String[] demandante = redDemandantes.split(",");
			for (int i = 0; i < demandante.length; i++) {
				redDemandanteFolio = Long.valueOf(demandante[i]);
				try {
					DBContext.getRedDemandanteService().cambiarEstadosDemandantes(redEstadoSeguimientoPostulante, redDemandanteFolio);
					result.put("redDemandantes", JSONArray.fromObject(DBContext.getRedOfertaDao().findRedDemandantesByRedOfertaId(redOfertaId)));
				} catch (WebException e) {
					e.printStackTrace();
				}
			}
		}
		serializeObject(result, response);
	}

}
